2.6 通知

1. 通知是什么?

通知是由事件触发的、集成端可自由定制的单轮交互。比如:

  • 手机来电时,发起通知询问用户是否接听来电;
  • 流量卡到期时,发起通知询问用户并让用户选择是否续期;
  • 电池电量达到提醒阈值时,发起通知询问用户是否导航去附近的充电桩;
  • 车胎压力超过设定阈值时,发起通知询问用户是否导航去附近的维修站;

对其概念进行抽象,可得出通知的大体流程如下:

  1. 前置事件发生:如接收到来电的事件被触发;

  2. 前置事件的处理逻辑主动触发一次单轮的、任务型的交互:

    1. 包含一句提示语,用于提示用户交互的意图;
    2. 需设置超时时间、超时再提醒的次数;
    3. 包含N类选项,每类选项对应一类处理逻辑,选项需要等待用户选择;
    4. 每类选项至少含有一种对应说法,用于命中该选项;
    5. 每类选项有且只有一个ID,用于标识该选项
  3. 当用户作出选择后,将选项ID反馈给交互发起者;

  4. 交互发起者根据当前条件给出反馈文本;

  5. 播报反馈文本后停止该次交互;

2. 通知优先级

AiLit要求每条通知都必须设定优先级(默认为 PRIORITY_NORMAL),用于指明通知并发时的入队策略、是否可以打断交互、是否可被唤醒打断、是否需要开主副唤醒等。

入队策略是指当正在处理通知时,集成端发起了一轮新通知,AiLit根据新旧两轮通知的优先级进行决策的凭据。其对应操作种类包括但不限于:新通知入队缓存、停止旧通知处理新通知等。决策矩阵如下:

行:处理中的旧通知 列:新通知 PRIORITY_NORMAL PRIORITY_HIGH PRIORITY_EMERGENCY
PRIORITY_NORMAL 新通知入队 新通知入队 新通知入队
PRIORITY_HIGH 旧通知停止、处理新通知 新通知入队 新通知入队
PRIORITY_EMERGENCY 旧通知停止、处理新通知 旧通知停止、处理新通知 新通知入队

是否可以打断交互、是否可被唤醒打断、是否需要开主副唤醒等则为产品层面的设定。综合来看,优先级设定如下表:

PRIORITY_NORMAL PRIORITY_HIGH PRIORITY_EMERGENCY
示例 流量卡到期提醒 停车场推荐 来电
入队策略 高级等、同级等、低级停 高级等、同级等、低级停 高级等、同级等、低级停
默认超时 15s * 1轮 15s * 1轮 15s * 1轮
可打断交互 × ×
可被唤醒打断 × ×
开主唤醒 × ×
开副唤醒 × × ×
开命令唤醒 × × ×

3. 发起通知

当集成端需要发起通知时,首先需构建一份通知(NotificationInfo)实例,每份通知实例可指定任意个数的通知选项(NotificationOption)。示例代码如下:

NotificationInfo notificationInfo = new NotificationInfo.Builder(name + "来电,接听还是取消?")//提示
            .setSilenceCnt(3)//超时轮数
            .setSilenceTime(8)//每次超时时长(单位:秒)
            .setPriority(NotificationInfo.PRIORITY_EMERGENCY)//通知优先级:normal < high < emergency
            .addOption(Command.INCOMING_ACCEPT, Arrays.asList(//选项一,接听来电
                new GeneralWakeUp("接听","jie ting", "0.127"),//接听来电对应的说法
                new GeneralWakeUp("接通","jie tong", "0.127"),//接听来电对应的说法
                new GeneralWakeUp("确定","que ding", "0.127"),//接听来电对应的说法
                new GeneralWakeUp("接电话","jie dian hua", "0.127")//接听来电对应的说法
                )
            ).addOption(Command.INCOMING_REJECT, Arrays.asList(//选项二,拒接来电
                new GeneralWakeUp("拒接","jv jie", "0.127"),//拒接来电对应的说法
                new GeneralWakeUp("拒绝","jv jue", "0.127"),//拒接来电对应的说法
                new GeneralWakeUp("取消","qv xiao", "0.127"),//拒接来电对应的说法
                new GeneralWakeUp("不接","bu jie", "0.127"),//拒接来电对应的说法
                )
            ).build();//完成构建

通知构建好之后,通过以下接口通知AiLit即可完成通知的发起:

// 发起通知
String notifiyId = AiLitContext.getSpeechManager().reportNotification(NotificationInfo, OnNotificationFeedbackListener);

// 取消&打断通知
AiLitContext.getSpeechManager().cancelNotification(notifiyId);

results matching ""

    No results matching ""